In [1]:
import mxnet as mx

In [2]:
probabilities = mx.nd.ones(6) / 6
probabilities


Out[2]:
[0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667]
<NDArray 6 @cpu(0)>

In [3]:
# To draw a single value, just pass in a vector of probabilities
mx.nd.sample_multinomial(probabilities)


Out[3]:
[3]
<NDArray 1 @cpu(0)>

In [4]:
# To draw multiple independant samples at ones
# Return an array of independant samples of given shape
mx.nd.sample_multinomial(data=probabilities, shape=(10))


Out[4]:
[3 4 5 3 5 3 5 2 3 3]
<NDArray 10 @cpu(0)>

In [5]:
mx.nd.sample_multinomial(data=probabilities, shape=(5, 10))


Out[5]:
[[2 2 1 5 0 5 1 2 2 4]
 [4 3 2 3 2 5 5 0 2 0]
 [3 0 2 4 5 4 0 5 5 5]
 [2 4 4 2 3 4 4 0 4 3]
 [3 0 3 5 4 3 0 2 2 1]]
<NDArray 5x10 @cpu(0)>

Example: Simulating 100 dice rolls


In [6]:
# Each having probabilities of 1/6th
probabilities = mx.nd.ones(6) / 6
probabilities


Out[6]:
[0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667]
<NDArray 6 @cpu(0)>

In [7]:
rolls = mx.nd.sample_multinomial(data=probabilities, shape=(1000))

In [8]:
counts = mx.nd.zeros(shape=(6, 1000))
totals = mx.nd.zeros(shape=6)

In [9]:
for i, roll in enumerate(rolls):
    totals[int(roll.asscalar())] += 1
    counts[:, i] = totals

In [10]:
totals / 1000


Out[10]:
[0.167 0.168 0.175 0.159 0.158 0.173]
<NDArray 6 @cpu(0)>

In [11]:
counts


Out[11]:
[[  0.   0.   0. ... 165. 166. 167.]
 [  1.   1.   1. ... 168. 168. 168.]
 [  0.   0.   0. ... 175. 175. 175.]
 [  0.   0.   0. ... 159. 159. 159.]
 [  0.   1.   2. ... 158. 158. 158.]
 [  0.   0.   0. ... 173. 173. 173.]]
<NDArray 6x1000 @cpu(0)>

In [12]:
x = mx.nd.arange(1000).reshape((1,1000)) + 1
x


Out[12]:
[[   1.    2.    3.    4.    5.    6.    7.    8.    9.   10.   11.   12.
    13.   14.   15.   16.   17.   18.   19.   20.   21.   22.   23.   24.
    25.   26.   27.   28.   29.   30.   31.   32.   33.   34.   35.   36.
    37.   38.   39.   40.   41.   42.   43.   44.   45.   46.   47.   48.
    49.   50.   51.   52.   53.   54.   55.   56.   57.   58.   59.   60.
    61.   62.   63.   64.   65.   66.   67.   68.   69.   70.   71.   72.
    73.   74.   75.   76.   77.   78.   79.   80.   81.   82.   83.   84.
    85.   86.   87.   88.   89.   90.   91.   92.   93.   94.   95.   96.
    97.   98.   99.  100.  101.  102.  103.  104.  105.  106.  107.  108.
   109.  110.  111.  112.  113.  114.  115.  116.  117.  118.  119.  120.
   121.  122.  123.  124.  125.  126.  127.  128.  129.  130.  131.  132.
   133.  134.  135.  136.  137.  138.  139.  140.  141.  142.  143.  144.
   145.  146.  147.  148.  149.  150.  151.  152.  153.  154.  155.  156.
   157.  158.  159.  160.  161.  162.  163.  164.  165.  166.  167.  168.
   169.  170.  171.  172.  173.  174.  175.  176.  177.  178.  179.  180.
   181.  182.  183.  184.  185.  186.  187.  188.  189.  190.  191.  192.
   193.  194.  195.  196.  197.  198.  199.  200.  201.  202.  203.  204.
   205.  206.  207.  208.  209.  210.  211.  212.  213.  214.  215.  216.
   217.  218.  219.  220.  221.  222.  223.  224.  225.  226.  227.  228.
   229.  230.  231.  232.  233.  234.  235.  236.  237.  238.  239.  240.
   241.  242.  243.  244.  245.  246.  247.  248.  249.  250.  251.  252.
   253.  254.  255.  256.  257.  258.  259.  260.  261.  262.  263.  264.
   265.  266.  267.  268.  269.  270.  271.  272.  273.  274.  275.  276.
   277.  278.  279.  280.  281.  282.  283.  284.  285.  286.  287.  288.
   289.  290.  291.  292.  293.  294.  295.  296.  297.  298.  299.  300.
   301.  302.  303.  304.  305.  306.  307.  308.  309.  310.  311.  312.
   313.  314.  315.  316.  317.  318.  319.  320.  321.  322.  323.  324.
   325.  326.  327.  328.  329.  330.  331.  332.  333.  334.  335.  336.
   337.  338.  339.  340.  341.  342.  343.  344.  345.  346.  347.  348.
   349.  350.  351.  352.  353.  354.  355.  356.  357.  358.  359.  360.
   361.  362.  363.  364.  365.  366.  367.  368.  369.  370.  371.  372.
   373.  374.  375.  376.  377.  378.  379.  380.  381.  382.  383.  384.
   385.  386.  387.  388.  389.  390.  391.  392.  393.  394.  395.  396.
   397.  398.  399.  400.  401.  402.  403.  404.  405.  406.  407.  408.
   409.  410.  411.  412.  413.  414.  415.  416.  417.  418.  419.  420.
   421.  422.  423.  424.  425.  426.  427.  428.  429.  430.  431.  432.
   433.  434.  435.  436.  437.  438.  439.  440.  441.  442.  443.  444.
   445.  446.  447.  448.  449.  450.  451.  452.  453.  454.  455.  456.
   457.  458.  459.  460.  461.  462.  463.  464.  465.  466.  467.  468.
   469.  470.  471.  472.  473.  474.  475.  476.  477.  478.  479.  480.
   481.  482.  483.  484.  485.  486.  487.  488.  489.  490.  491.  492.
   493.  494.  495.  496.  497.  498.  499.  500.  501.  502.  503.  504.
   505.  506.  507.  508.  509.  510.  511.  512.  513.  514.  515.  516.
   517.  518.  519.  520.  521.  522.  523.  524.  525.  526.  527.  528.
   529.  530.  531.  532.  533.  534.  535.  536.  537.  538.  539.  540.
   541.  542.  543.  544.  545.  546.  547.  548.  549.  550.  551.  552.
   553.  554.  555.  556.  557.  558.  559.  560.  561.  562.  563.  564.
   565.  566.  567.  568.  569.  570.  571.  572.  573.  574.  575.  576.
   577.  578.  579.  580.  581.  582.  583.  584.  585.  586.  587.  588.
   589.  590.  591.  592.  593.  594.  595.  596.  597.  598.  599.  600.
   601.  602.  603.  604.  605.  606.  607.  608.  609.  610.  611.  612.
   613.  614.  615.  616.  617.  618.  619.  620.  621.  622.  623.  624.
   625.  626.  627.  628.  629.  630.  631.  632.  633.  634.  635.  636.
   637.  638.  639.  640.  641.  642.  643.  644.  645.  646.  647.  648.
   649.  650.  651.  652.  653.  654.  655.  656.  657.  658.  659.  660.
   661.  662.  663.  664.  665.  666.  667.  668.  669.  670.  671.  672.
   673.  674.  675.  676.  677.  678.  679.  680.  681.  682.  683.  684.
   685.  686.  687.  688.  689.  690.  691.  692.  693.  694.  695.  696.
   697.  698.  699.  700.  701.  702.  703.  704.  705.  706.  707.  708.
   709.  710.  711.  712.  713.  714.  715.  716.  717.  718.  719.  720.
   721.  722.  723.  724.  725.  726.  727.  728.  729.  730.  731.  732.
   733.  734.  735.  736.  737.  738.  739.  740.  741.  742.  743.  744.
   745.  746.  747.  748.  749.  750.  751.  752.  753.  754.  755.  756.
   757.  758.  759.  760.  761.  762.  763.  764.  765.  766.  767.  768.
   769.  770.  771.  772.  773.  774.  775.  776.  777.  778.  779.  780.
   781.  782.  783.  784.  785.  786.  787.  788.  789.  790.  791.  792.
   793.  794.  795.  796.  797.  798.  799.  800.  801.  802.  803.  804.
   805.  806.  807.  808.  809.  810.  811.  812.  813.  814.  815.  816.
   817.  818.  819.  820.  821.  822.  823.  824.  825.  826.  827.  828.
   829.  830.  831.  832.  833.  834.  835.  836.  837.  838.  839.  840.
   841.  842.  843.  844.  845.  846.  847.  848.  849.  850.  851.  852.
   853.  854.  855.  856.  857.  858.  859.  860.  861.  862.  863.  864.
   865.  866.  867.  868.  869.  870.  871.  872.  873.  874.  875.  876.
   877.  878.  879.  880.  881.  882.  883.  884.  885.  886.  887.  888.
   889.  890.  891.  892.  893.  894.  895.  896.  897.  898.  899.  900.
   901.  902.  903.  904.  905.  906.  907.  908.  909.  910.  911.  912.
   913.  914.  915.  916.  917.  918.  919.  920.  921.  922.  923.  924.
   925.  926.  927.  928.  929.  930.  931.  932.  933.  934.  935.  936.
   937.  938.  939.  940.  941.  942.  943.  944.  945.  946.  947.  948.
   949.  950.  951.  952.  953.  954.  955.  956.  957.  958.  959.  960.
   961.  962.  963.  964.  965.  966.  967.  968.  969.  970.  971.  972.
   973.  974.  975.  976.  977.  978.  979.  980.  981.  982.  983.  984.
   985.  986.  987.  988.  989.  990.  991.  992.  993.  994.  995.  996.
   997.  998.  999. 1000.]]
<NDArray 1x1000 @cpu(0)>

In [13]:
estimates = counts / x

In [14]:
print(estimates[:,0])
print(estimates[:,1])
print(estimates[:,100])


[0. 1. 0. 0. 0. 0.]
<NDArray 6 @cpu(0)>

[0.  0.5 0.  0.  0.5 0. ]
<NDArray 6 @cpu(0)>

[0.1980198  0.15841584 0.17821783 0.18811882 0.12871288 0.14851485]
<NDArray 6 @cpu(0)>

In [15]:
%matplotlib inline

from matplotlib import pyplot as plt
plt.figure(figsize=(10, 10))
plt.plot(estimates[0, :].asnumpy(), label="Estimated P(die=1)")
plt.plot(estimates[1, :].asnumpy(), label="Estimated P(die=2)")
plt.plot(estimates[2, :].asnumpy(), label="Estimated P(die=3)")
plt.plot(estimates[3, :].asnumpy(), label="Estimated P(die=4)")
plt.plot(estimates[4, :].asnumpy(), label="Estimated P(die=5)")
plt.plot(estimates[5, :].asnumpy(), label="Estimated P(die=6)")
plt.axhline(y=0.16666, color='black', linestyle='dashed')
plt.legend()
plt.show()


The most important distributions

  • Uniform Distribution
  • Categorical Distribution
  • Normal Distribution (aka Gaussian Distribution)
  • Binomial Distribution
  • Multinomial Distribution
  • Poisson Distribution
  • Beta Distribution
  • Dirichlet Distribution
  • Gamma Distribution
  • Wishart Distribution